home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm3.lha / UTILITY / StoneCr.doc < prev    next >
Text File  |  1995-03-04  |  6KB  |  119 lines

  1.  
  2. =-=-=-=-=-=-=-=-=-=-=-=> StoneCracker v4.10.3 <=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3.  
  4. Questo compattatore puo' comprimere eseguibili, dati, e anche programmi non
  5. rilocabili, cioe' assemblati con "ORG" e "LOAD" a degli indirizzi assoluti
  6. (fissi) e salvati con il WB (Write Binary) anziche' con il WO.
  7.  
  8. Decruncher per eseguibili: gli hunk (ossia le SECTION) sono compattati, poi
  9. all'inizio del file viene "attaccato" il decruncatore e il rilocatore, che
  10. provvedera' a scompattare gli hunk (data_C, code ecc.) e ad allocarli nella
  11. memoria giusta. Fatto questo viene fatta partire la section code iniziale.
  12. nota: le data e instruction cache sono azzerate prima di partire.
  13. nota2: il file compattato e' autosuffuciente, non richiede la stc.library.
  14.  
  15. Data files - viene compattato il file, qualsiasi cosa contenga, e non e'
  16. attaccato nessun decruncher.
  17.  
  18. Programmi ad ind. assoluti - Questo tipo di programmazione e' la peggiore
  19. possibile al mondo, non fate mai programmi di questo tipo. Comunque per
  20. comprimere uno di questi file occorre immettere questi dati:
  21.  
  22. Load - $xxxxx indirizzo dove scompattare il file, lo stesso dell'ORG & LOAD
  23. Jump - $xxxxx da quale address far partire l'esecuzione, normalmente si
  24.     comincia dall'inizio, ma dipende da come avete organizzato la memoria
  25.  
  26. Ci sono 5 tipi di packmode, ossia di compressione. La piu' potente e' quella
  27. a 16k, poi ci sono 8k, 4k, 2k, 1k. Conviene usare sempre quella a 16k, tranne
  28. nei casi che il file da compattare sia piu' piccolo di 16k, in questo caso
  29. puo' succedere che venga piu' corto il file con la compressione a 8k o 4k.
  30. Questo numero e' la massima distanza di ricerca di stringhe uguali per la
  31. compressione.
  32.  
  33. DataID - e' il suffisso che viene aggiunto alla fine dei file data compressi.
  34.  
  35. - In sostanza, l'uso di questo compattatore puo' essere di due tipi:
  36.  
  37. 1) Compattare il file eseguibile salvato con "WO" da ASMONE, se questo file
  38.    non e' "immenso". Il problema e' che se un file, ad esempio, e' lungo
  39.    250Kb, e compresso viene 100Kb, per scompattarsi in memoria occorrono
  40.    ben 100Kb+250Kb, perche' deve essere caricato in memoria il file compresso
  41.    lungo 100Kb, e questo deve trovare altri 250Kb per "copiarci" il file
  42.    decompresso. Se il file deve scompattarsi su Amiga con 1Mb, occorre tener
  43.    conto del fatto che se fosse lungo 650Kb decompresso e 400Kb compresso,
  44.    occorrerebbero 650+400=1050Kb, e solitamente ne rimangono liberi per
  45.    un file circa 850-900!! Per quanto riguarda produzioni AGA, occorre
  46.    tener conto il limite dei 2MB, anziche' 1MB. La miglior scelta e' quella
  47.    di provare a compattare l'eseguibile con StoneCracker, e verificare se
  48.    si decompatta sul computer di base. Se non ce la fa, allora si deve optare
  49.    per il TitanCrunch, che e' piu' lento e meno efficiente, ma decomprime
  50.    5Kb alla volta, liberando man mano la memoria, e cio' permette la
  51.    decompressione di qualsiasi cosa.
  52.  
  53. 2) Compattare dei dati, da caricare e decomprimere nel nostro programma.
  54.    A questo scopo, e' presente la routine di decompressione. Per usarla,
  55.    basta includerla nel nostro listato, ed eseguirla dandogli l'indirizzo
  56.    dove si trova la figura, la musica o quant'altro compresso in a1, e
  57.    l'indirizzo del buffer azzerato dove dovra' decomprimere i dati in a0:
  58.  
  59.     LEA    DEST,A0        ; DESTINATION ADDRESS
  60.     LEA    CRUNC,A1    ; CRUNCHED DATA
  61.     BSR.W    DECRUNCH
  62.  
  63. Vi sconsiglio vivamente di usare la compressione di file ad indirizzi assoluti
  64. perche' non hanno futuro.
  65.  
  66.  
  67. ********* Documentazione originale sul formato del file compresso ***********
  68.  
  69.     Decrunch info header & decrunching
  70.  
  71.         Every file crunched with Stc4.02a or Stc4.10.3 has following header
  72.         (16 bytes) at the beginning of the crunched data:
  73.  
  74.             "S404" or "S403"    ; cruncher version - string
  75.             Security length     ; overlap size - longword (security)
  76.             Original length     ; decrunched length - longword
  77.             Crunched length     ; crunched length - longword
  78.                .                ; crunched data starts
  79.                .
  80.                .
  81.  
  82.         Security length is always 16 + something.
  83.  
  84.         There are also two control words at the end of crunched data. For
  85.         historical reasons it's quite wierd. I'll explain it with a 
  86.         following picture:
  87.  
  88.         <<- Lower memory                           Higher memory ->>
  89.  
  90.                   +------------ Crunched length ------------+
  91.                   |                                         |
  92.         InfoHeader|......................LastWord|BitCounter|MaxBits
  93.                             ^                 ^       ^         ^
  94.                             |                 |       |         |
  95.             Crunched data --+                 |       |         |
  96.                                               |       |         |
  97.                          Last crunched word --+       |         |
  98.                                                       |         |
  99.            How many used bits there are in LastWord --+         |
  100.                                                                 |
  101.                          Efficiency (packmode - only in S404) --+
  102.  
  103.         If both crunched data and destination memory overlap there must
  104.         be atleast 'Security length' distance between the start of the
  105.         crunched data and the start of the destination memory:
  106.  
  107.         <<- Lower memory                               Higher memory ->>
  108.  
  109.                   <<<-------------- Decrunching direction --------------
  110.  
  111.         InfoHeader|......................LastWord|BitCounter|MaxBits
  112.         ^
  113.         |             |<------------ Destination memory starts here ....
  114.         |             |
  115.         +-- SecLen ---+
  116.         |
  117.         +---------------> Crunched data starts here..
  118.  
  119.